package com.example.workflow.mapper;

import com.example.workflow.pojo.Form;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 申请人员工单统计Mapper接口
 */
@Mapper
public interface UserOrderStatsMapper {
    /**
     * 按日统计指定日期范围内用户提交的工单数量
     * URL: /user/total-count
     * 
     * @param userId 用户ID，如果为null则统计所有用户
     * @param beginDate 开始日期
     * @param endDate 结束日期
     * @return 按日统计的工单数量列表，包含日期和数量
     */
    List<Map<String, Object>> countOrdersByDay(
        @Param("userId") Integer userId,
        @Param("beginDate") LocalDate beginDate,
        @Param("endDate") LocalDate endDate
    );
    
    /**
     * 按周统计指定日期范围内用户提交的工单数量
     * URL: /user/total-count
     * 
     * @param userId 用户ID，如果为null则统计所有用户
     * @param beginDate 开始日期
     * @param endDate 结束日期
     * @return 按周统计的工单数量列表，包含周起始日期和数量
     */
    List<Map<String, Object>> countOrdersByWeek(
        @Param("userId") Integer userId,
        @Param("beginDate") LocalDate beginDate,
        @Param("endDate") LocalDate endDate
    );
    
    /**
     * 按月统计指定日期范围内用户提交的工单数量
     * URL: /user/total-count
     * 
     * @param userId 用户ID，如果为null则统计所有用户
     * @param beginDate 开始日期
     * @param endDate 结束日期
     * @return 按月统计的工单数量列表，包含月份和数量
     */
    List<Map<String, Object>> countOrdersByMonth(
        @Param("userId") Integer userId,
        @Param("beginDate") LocalDate beginDate,
        @Param("endDate") LocalDate endDate
    );

    /**
     * 获取用户所有提交过工单的月份
     * 用于系统内部统计
     * 
     * @param userId 用户ID
     * @return 用户提交过工单的月份列表，格式：yyyy-MM
     */
    List<String> getUserOrderMonths(@Param("userId") Integer userId);
    
    /**
     * 统计用户各状态工单数量
     * URL: /user/status-count
     * 
     * @param userId 用户ID
     * @return 各状态的工单数量
     */
    Map<String, Object> countUserOrdersByStatus(@Param("userId") Integer userId);
    
    /**
     * 统计用户各类型工单数量
     * URL: /user/type-count
     * 
     * @param userId 用户ID
     * @return 各类型的工单数量
     */
    Map<String, Object> countUserOrdersByType(@Param("userId") Integer userId);
} 